//
//  MCPublicTableViewCellModel.swift
//  UITableViewDemo
//
//  Created by daqsoft-mac on 2022/5/11.
//

import UIKit

typealias MCTableViewCellClickBlock = (IndexPath, Any?) -> Void?

class MCPublicTableViewCellModel: NSObject {
    
    /// Cell的序号
    var sorting : Int = -1
    
    /// Cell的重用标志符号
    var identifier : String = ""
    
    /// Cell的高度
    var height : CGFloat = 0
    
    /// Cell的附加数据
    var otherData : Any?
    
    /// 是否可以点击，默认为可点击
    var canResponseCellClickEvent : Bool = true
    
    /// Cell的点击回调事件
    var cellClickBlock : MCTableViewCellClickBlock?
    
}

/*
 * MCPublicTableViewCellProtocol代理方法
 */
extension MCPublicTableViewCellModel : MCPublicTableViewCellProtocol {
    
    /// 获取Cell高度
    /// - Returns: Cell的高度
    func obtainHeight() -> CGFloat {
        return height
    }
    
    /// 获取Cell的索引
    /// - Returns: Cell的索引
    func obtainSortIndex() -> Int {
        return sorting
    }
    
    /// 获取Cell的重用标志符
    /// - Returns: 标志符
    func obtainIdentifier() -> String {
        return identifier
    }
    
    /// 获取Cell的附加数据
    /// - Returns: 附加数据
    func obtainOtherData() -> Any? {
        return otherData
    }
    
    /// Cell的点击事件
    /// - Parameter indexPath: 点击的Index
    func cellSelect(_ indexPath: IndexPath) {
        guard let cellClickBlock = cellClickBlock else {
            return
        }
        if canResponseCellClickEvent {
            cellClickBlock(indexPath, otherData)
        }
    }
}

/*
 * 准寻比较协议
 */
extension MCPublicTableViewCellModel : Comparable {
    static func < (lhs: MCPublicTableViewCellModel, rhs: MCPublicTableViewCellModel) -> Bool {
        return lhs.sorting < rhs.sorting
    }
}
